home *** CD-ROM | disk | FTP | other *** search
/ EuroCD 3 / EuroCD 3.iso / Programming / AMarquee / Install_AMarquee < prev    next >
Text File  |  1998-06-24  |  24KB  |  521 lines

  1. ; Installation script for the AMarquee system.
  2. ; by Jeremy Friesner.  Miami support by Fredrik Rambris.
  3.  
  4. (transcript "On installing AMarquee...")
  5.  
  6. ;Take a guess at which stack is installed...
  7. (set DefaultSys 1)  ; default to Miami...
  8. (if (= (run "assign inet: EXISTS" (safe)) 0) (set DefaultSys 2))  ; or Inet225 if assign is there
  9. (if (= (run "assign AmiTCP: EXISTS" (safe)) 0) (set DefaultSys 0))  ; or AmiTCP if assign is there
  10.  
  11. (set tcpsys
  12.   (askchoice
  13.   (prompt "Which TCP software do you wish to use AMarqueed with?")
  14.   (help @askdir-help)
  15.   (default DefaultSys)
  16.   (choices
  17.     "AmiTCP"
  18.     "Miami"
  19.     "Inet225"
  20.     "Other"
  21.     )
  22.   )
  23. )
  24.  
  25. (set DaemonFileName "AMarqueed")         ; default
  26. (set LibraryFileName"amarquee.library")  ; default
  27. (set tcpname "(Unknown)")                ; default
  28. (set dbDir "")                           ; default
  29.  
  30. (select tcpsys
  31.   (                              ; for AmiTCP
  32.    (set servdir "AmiTCP:serv")
  33.    (set tcpname "AmiTCP")
  34.    (set dbDir "AmiTCP:db") 
  35.   )
  36.   (
  37.     (set servdir "")             ; for Miami--ask user
  38.     (set tcpname "Miami")
  39.   )
  40.   (                              ; for Inet225
  41.    (set servdir "Inet:serv")
  42.    (set tcpname "Inet225")
  43.    (set dbDir "Inet:db")
  44.    (set DaemonFileName "AMarqueed.inet225")
  45.    (set LibraryFileName "amarquee.library.inet225")
  46.   )
  47.   (set servdir "")               ; for Other--ask user
  48. )
  49.  
  50. (set InstallOpts
  51.   (askoptions
  52.     (
  53.       (prompt "Please indicate which parts of the AMarquee system you wish to install.")
  54.       (help "Which parts of the AMarquee system you should install depend on what you want to do with AMarquee on your system.  Only install the AMarquee server if you wish to use your computer as a host for other Amigas to connect to with their AMarquee programs.  Only install the AMarquee C include files if you wish to write your own AMarquee programs.")
  55.       (choices
  56.         "amarquee.library"
  57.         "AMarqueed server"
  58.         "AMarquee.library C include files"
  59.         "AMarquee.library PCQ include & .lib files"
  60.         "AMarquee Documentation"
  61.         "AMarquee Example Programs"
  62.       )
  63.       (default 19)
  64.     )
  65.   )
  66. )
  67.  
  68. (if (BITAND InstallOpts 1)
  69.   (
  70.     ; install amarquee.library
  71.     (copylib (source LibraryFileName) (dest "LIBS:") (newname "amarquee.library"))
  72.   )
  73. )
  74.  
  75. (if (BITAND InstallOpts 2)
  76.   (
  77.     ; install AMarqueed server
  78.         
  79.     (if (= tcpsys 3)  ; Other... 
  80.       (message "\nThis Installer script only knows how to install AMarqueed for AmiTCP, Inet225, or Miami.  To install AMarqueed for another system, you will need to do it yourself.  See the AMarquee installation documentation for what needs to be done for Miami, Inet225, or AmiTCP; your TCP stack will likely have similar requirements.  This script can still install the other components of the AMarquee package, though.")
  81.       (
  82.         (if (= servdir "")
  83.           (set servdir   ; Otherwise, Miami
  84.             (askdir
  85.               (prompt "Where do you want to put the AMarquee server executable, AMarqueed?")
  86.               (help @askdir-help)
  87.               (default "Work:")
  88.             )
  89.           )
  90.         )
  91.         
  92.         ; Copy server file
  93.         (copyfiles (source DaemonFileName) (dest servdir) (newname "AMarqueed"))
  94.  
  95.         (set makeResident
  96.           (askbool
  97.             (
  98.               (prompt "\n\nDo you wish to make AMarqueed resident in memory?  This will save memory when multiple connections are active simultaneously.")
  99.               (help "Making a program resident causes AmigaDOS to keep its executable in memory permanently.  When the program is run, instead of loading a new copy of the code into memory, the resident code is shared by the new process.")
  100.               (default 1)
  101.             )
  102.           ) 
  103.         )
  104.  
  105.         (if (= makeResident 1)
  106.           (
  107.             (set InetDPath "AMarqueed")
  108.             (startup "AMarqueed" 
  109.               (prompt ("\n\nOkay to put the line\n\nresident >NIL: %s pure\n\ninto your s:user-startup?" (tackon servdir "AMarqueed")))
  110.               (help "This line in your user-startup will load AMarqueed into memory so that it can be found when needed by inetd.  If you choose not to add this line here, you will need to execute it somewhere else, or inetd will not be able to find AMarqueed and will refuse AMarqueed connections.")
  111.               (command ("resident >NIL: %s PURE" (tackon servdir "AMarqueed") ) )
  112.             )
  113.             (run "resident >NIL: AMarqueed PURE" (safe))  ; in case they don't reboot before trying it out!
  114.           )
  115.           (
  116.             (set InetDPath (tackon servdir "AMarqueed") )
  117.           )
  118.         )
  119.             
  120.         ; modify config files!
  121.         (if (OR (= tcpsys 0) (= tcpsys 2))  ; AmiTCP or Inet225!
  122.           (
  123.             ; modify AmiTCP/Inet225 config files
  124.             (delete "t:edit_text_succeeded")
  125.             (set ARexxRunString (cat "sys:rexxc/rx EditTextFile.rexx " dbDir "/services AMarquee AMarquee^^^^^^^^2957/tcp"))
  126.             (run
  127.               (ARexxRunString)
  128.               (prompt "\n\nTo use AMarqueed with " tcpname ", the line:\n\nAMarquee 2957/tcp\n\nneeds to be present in your " dbDir "/services file.  Do you wish me to update the file?  (Note:  AMarquee will not receive connections if this line is not precisely as shown above!)")
  129.               (help "The inclusion of this line into " dbDir "/services is done by an ARexx script which is smart enough to correctly edit previous installations.  Also it will make a backup (to " dbDir "/services.bak) before writing.")
  130.               (confirm)
  131.             )
  132.             (if (not (exists "t:edit_text_succeeded") )
  133.               (message "The config file editing script (EditTextFile.rexx) did not complete successfully.  You may need to edit your " dbDir "/services file yourself.  Look in the 'Installation' section of the AMarquee docs for instructions.")
  134.             )
  135.             (delete "t:edit_text_succeeded")
  136.             (set userName "root")
  137.             (if (= tcpsys 2) (set userName ""))  ; Inet225 doesn't have the username field
  138.             (set ARexxRunString (cat "sys:rexxc/rx EditTextFile.rexx " dbDir "/inetd.conf AMarquee AMarquee^^^^stream^^^^^^tcp^nowait^" userName "^^^^" InetDPath))
  139.  
  140.             (run
  141.               (ARexxRunString)
  142.               (prompt (cat "\nAlso, the line:\n\nAMarquee stream tcp nowait " userName " " InetDPath "\n\nneeds to be present in your " dbDir "/inetd.conf file.  Do you wish me to update that file?\n(Note:  AMarquee will not receive connections if this line is not precisely as shown above!)"))
  143.               (help "The inclusion of this line into " dbDir "/inetd.conf is done by an ARexx script which is smart enough to correctly edit previous installations.  Also it will make a backup (to " dbDir "/inetd.conf.bak) before writing.")
  144.               (confirm)
  145.             )
  146.  
  147.             (if (not (exists "t:edit_text_succeeded") )
  148.               (message "The config file editing script (EditTextFile.rexx) did not complete successfully.  You may need to edit your " dbDir "/inetd.conf file yourself.  Look in the 'Installation' section of the AMarquee docs for instructions.")
  149.             )
  150.           )
  151.           (
  152.             ; Do config files for Miami: Create the textfile with a pointer to AMarqueed
  153.             (textfile
  154.               (dest "t:dbtemp")
  155.               (append
  156.                 "ADD services AMarquee 2957/tcp\n"
  157.                 ("ADD inetd AMarquee stream tcp nowait root %s\n" InetDPath)
  158.               )
  159.             )
  160.  
  161.             ; Add the lines to envarc:MiamiChangeDB (i.e. don't overwrite! Other programs
  162.             ; may have their lines there too)
  163.             (run "type t:dbtemp >>envarc:MiamiChangeDB")
  164.  
  165.             ; If Miami is running... why not make it read the new settings?
  166.             (run "SYS:Rexxc/RX \"ADDRESS MIAMI.1;changedb\"")
  167.  
  168.             ; Clean up
  169.             (delete "t:dbtemp")
  170.           )
  171.         )
  172.  
  173.         ; set ENV vars if desired
  174.         (set ServerOpts
  175.           (askoptions
  176.             (prompt "There are several ENV variables AMarqueed looks at to determine limits on usage of your system.  Please check the usage limitations you wish to enforce.")
  177.             (help "Each of these options will set for you an ENV variable.  This variable will be copied into ENVARC: so that it will be retained after rebooting.  To change the setting later, simply edit the file in ENVARC:, or use setenv and then copy the file from env: to envarc: when you are happy with it.")
  178.             (choices 
  179.               "Limit memory used per connection" 
  180.               "Specify minimum amount of memory to keep free" 
  181.               "Limit number of connections per host" 
  182.               "Limit total number of connections" 
  183.               "Ban certain hosts or programs" 
  184.               "Set AMarqueed's execution priority" 
  185.               "Adjust idle-ping rate"
  186.               "Give special privileges to certain clients"
  187.               "Limit size of servers' message queues"
  188.             )
  189.             (default 0)
  190.           )
  191.         )
  192.  
  193.         (if (BITAND ServerOpts 1)
  194.           (
  195.             ; AMARQUEED_MAXMEM
  196.             (set AMarqueed_MaxMem
  197.               (asknumber
  198.                 (prompt "\n\nSpecify the maximum amount (in kilobytes) of memory that each AMarquee connection may allocate.  (Enter -1 to impose no individual allocation limit)")
  199.                 (help "By setting this value, you can guarantee that no one AMarqueed process will dynamically allocate more than a certain amount of your RAM.")
  200.                 (range -1 99999999999)
  201.                 (default -1)
  202.               )
  203.             )
  204.             (textfile
  205.               (dest "ENVARC:AMARQUEED_MAXMEM")
  206.               (append AMarqueed_MaxMem)
  207.             )
  208.           )
  209.         )
  210.  
  211.         (if (BITAND ServerOpts 2)
  212.           (
  213.             ; AMARQUEED_MINFREE
  214.             (set AMarqueed_MinFree
  215.               (asknumber
  216.                 (prompt "\n\nSpecify (in kilobytes) the minimum amount of memory that should be left free on your system at all times.  (Enter -1 to impose no minimum free store restriction)")
  217.                 (help "By setting this value, you can guarantee that no AMarqueed process will grab the last kilobytes of memory left in your system.  Of course, this ENV variable cannot affect what other programs do...")
  218.                 (range -1 99999999999)
  219.                 (default -1)
  220.               )
  221.             )
  222.             (textfile
  223.               (dest "ENVARC:AMARQUEED_MINFREE")
  224.               (append AMarqueed_MinFree)
  225.             )
  226.           )
  227.         )
  228.  
  229.         (if (BITAND ServerOpts 4)
  230.           (
  231.             ; AMARQUEED_MAXCONN
  232.             (set AMarqueed_MaxConn
  233.               (asknumber
  234.                 (prompt "\n\nSpecify the maximum number of simultaneous connections that any one Amiga may have to your AMarquee server. (Enter -1 to impose no maximum number of connections)")
  235.                 (help "This setting will prevent any one client machine from hogging your system by opening too many connections.")
  236.                 (range -1 99999999999)
  237.                 (default -1)
  238.               )
  239.             )
  240.  
  241.             (textfile
  242.               (dest "ENVARC:AMARQUEED_MAXCONN")
  243.               (append AMarqueed_MaxConn)
  244.             )
  245.           )
  246.         )
  247.  
  248.         (if (BITAND ServerOpts 8)
  249.           (
  250.             ; AMARQUEED_TOTALMAXCONN
  251.             (set AMarqueed_TotalMaxConn
  252.               (asknumber
  253.                 (prompt "\n\nSpecify the total maximum number of simultaneous AMarquee connections that can exist on your system at once. (Enter -1 to impose no maximum number of connections)")
  254.                 (help "By setting this value, you can guarantee that no more than (n) Amarquee connections will ever be active at once.  Using this in combination with the AMARQUEED_MAXMEM ENV variable puts a finite limit on the total amount of your RAM that could be in use by Amarqueed at any one time.")
  255.                 (range -1 99999999999)
  256.                 (default -1)
  257.               )
  258.             )
  259.             (textfile
  260.               (dest "ENVARC:AMARQUEED_TOTALMAXCONN")
  261.               (append AMarqueed_TotalMaxConn)
  262.             )
  263.           )
  264.         )
  265.  
  266.         (if (BITAND ServerOpts 16)
  267.           (
  268.             ; AMARQUEED_BANNED
  269.             (set AMarqueed_banned
  270.               (askstring
  271.                 (prompt "\n\nSpecify a regular expression to determine which hosts and/or programs should be banned from your computer. (Leave blank to impose no restrictions)  The regular expression should be in the form /HostExp/ProgExp.  See the Help for examples.")
  272.                 (help "Examples:  To ban all hosts from Australia, use /#?.au/#?.  Or to ban all amarquee clients named Bob, use /#?/Bob.  Or perhaps you have a list of things to ban:  /(evil.hackers.com|sdcc8.ucsd.edu|fred.nerd.org)/#?")
  273.                 (default "")
  274.               )
  275.             )
  276.             (textfile 
  277.               (dest "ENVARC:AMARQUEED_BANNED")
  278.               (append AMarqueed_BANNED)
  279.             )
  280.           )
  281.         )
  282.  
  283.         (if (BITAND ServerOpts 32)
  284.           (
  285.             ; AMARQUEED_PRIORITY
  286.             (set AMarqueed_Priority
  287.               (asknumber
  288.                 (prompt "\n\nSpecify the priority that AMarqueed daemons should execute at.")
  289.                 (help "This is the standard Amiga priority system--lower priority programs get less CPU time when the system is busy, higher priority programs get more.")
  290.                 (range -128 127)
  291.                 (default -10)
  292.               )
  293.             )
  294.             (textfile
  295.               (dest "ENVARC:AMARQUEED_PRIORITY")
  296.               (append AMarqueed_Priority)
  297.             )
  298.           )
  299.         )
  300.  
  301.         (if (BITAND ServerOpts 64)
  302.           (
  303.             ; AMARQUEED_PINGRATE
  304.             (set AMarqueed_PingRate
  305.               (asknumber
  306.                 (prompt "\n\nSpecify the number of minutes of idle time that should elapse before an idle-ping query is issued.")
  307.                 (help "In order to ensure that all connections are still 'live', AMarqueed occasionally sends out an 'are you still there?' request to any client that hasn't been heard from for a while.  Shorter ping rates cause a (very) slight extra demand on network and CPU usage, but cut down on the likelihood of 'dead' connections taking up memory.")
  308.                 (range 1 99999999999)
  309.                 (default 3)
  310.               )
  311.             )
  312.             (textfile 
  313.               (dest "ENVARC:AMARQUEED_PINGRATE")
  314.               (append AMarqueed_PingRate)
  315.             )
  316.           )
  317.         )
  318.         
  319.         (if (BITAND ServerOpts 128)
  320.           (
  321.             (set PrivOpts
  322.               (askoptions
  323.                 (prompt "These settings allow you to give special abilities to machines or programs that you trust.  These privileges could be abused by evil people, so don't give them out lightly!\n\nSPECIFY WHO MAY:")
  324.                 (help "Each of these options will set for you an ENV variable.  This variable will be copied into ENVARC: so that it will be retained after rebooting.  To change the setting later, simply edit the file in ENVARC:, or use setenv and then copy the file from env: to envarc: when you are happy with it.")
  325.                 (choices 
  326.                   "Kill (i.e. forcibly disconnect) other clients"
  327.                   "Send system messages (i.e. 'wall' messages)"
  328.                   "Change AMarqueed Settings & Env Variables"
  329.                   "Do ALL of the above"
  330.                 )
  331.                 (default 0)
  332.               )
  333.             )
  334.             
  335.             (if (BITAND PrivOpts 1)
  336.               (
  337.                 ; Kill Clients Privilege
  338.                 (set AMarqueed_KillClients
  339.                   (askstring
  340.                     (prompt "\n\nSpecify a regular expression to determine which hosts and/or programs may kill other clients on your server. (Leave blank to not give this privilege to anyone)  The regular expression should be in the form /HostExp/ProgExp.  See the Help for examples.")
  341.                     (help "Examples:  To give this privilege to all computers from Australia, use /#?.au/#?.  Or to give this privilege to all clients named Bob, use /#?/Bob.  Or perhaps you have a list of things to this privilege to:  /(localhost|sdcc8.ucsd.edu|fred.nerd.org)/#?")
  342.                     (default "/localhost/#?")
  343.                   )
  344.                 )
  345.                 (textfile 
  346.                   (dest "ENVARC:AMARQUEED_KILLCLIENTS")
  347.                   (append AMarqueed_KillClients)
  348.                 )
  349.               )
  350.             )
  351.             
  352.             (if (BITAND PrivOpts 2)
  353.               (
  354.                 ; Send System Messages
  355.                 (set AMarqueed_SendSysMessages
  356.                   (askstring
  357.                     (prompt "\n\nSpecify a regular expression to determine which hosts and/or programs may send 'system messages' on your server. (Leave blank to not give this privilege to anyone)  The regular expression should be in the form /HostExp/ProgExp.  (See help for info on what System Messages are).")
  358.                     (help "'System Messages' are a special form of message that may be sent over AMarquee.  They are meant to be used by the server administrator to send special messages (such as 'I'm shutting down the server now') to every client on the system.")
  359.                     (default "/localhost/#?")
  360.                   )
  361.                 )
  362.                 (textfile 
  363.                   (dest "ENVARC:AMARQUEED_SENDSYSMESSAGES")
  364.                   (append AMarqueed_SendSysMessages)
  365.                 )
  366.               )
  367.             )
  368.             
  369.             (if (BITAND PrivOpts 4)
  370.               (
  371.                 ; Send System Messages
  372.                 (set AMarqueed_Admin
  373.                   (askstring
  374.                     (prompt "\n\nSpecify a regular expression to determine which hosts and/or programs may change AMarqueed environment variables on your server. The regular expression should be in the form /HostExp/ProgExp.  (Leave blank to not give this privilege to anyone)  NOTE:  IF A USER HAS THIS PRIVILEGE, HE IS ABLE TO ACQUIRE ALL OTHER PRIVILEGES AS WELL!  (See help for examples).")
  375.                     (help "Examples:  To give admin privileges to all computers from Australia, use /#?.au/#?.  Or to give full admin privileges to all clients named Bob, use /#?/Bob.  Or perhaps you have a list of things to give privileges to:  /(localhost|sdcc8.ucsd.edu|fred.nerd.org)/#?")
  376.                     (default "/localhost/#?")
  377.                   )
  378.                 )
  379.                 (textfile 
  380.                   (dest "ENVARC:AMARQUEED_ADMIN")
  381.                   (append AMarqueed_Admin)
  382.                 )
  383.               )
  384.             )
  385.             
  386.             (if (BITAND PrivOpts 8)
  387.               (
  388.                 ; All special privileges
  389.                 (set AMarqueed_AllPrivileges
  390.                   (askstring
  391.                     (prompt "\n\This parameter is a shortcut way to give certain clients ALL of the other privileges at once.  Specify a regular expression to determine which hosts and/or programs should get all privileges on your server. (Leave blank to not give full privileges to anyone)  The regular expression should be in the form /HostExp/ProgExp.  See the Help for examples.")
  392.                     (help "Examples:  To give full admin privileges to all computers from Australia, use /#?.au/#?.  Or to give full admin privileges to all clients named Bob, use /#?/Bob.  Or perhaps you have a list of things to give privileges to:  /(localhost|sdcc8.ucsd.edu|fred.nerd.org)/#?")
  393.                     (default "/localhost/#?")
  394.                   )
  395.                 )
  396.                 (textfile 
  397.                   (dest "ENVARC:AMARQUEED_ALLPRIVILEGES")
  398.                   (append AMarqueed_AllPrivileges)
  399.                 )
  400.               )
  401.             )
  402.           )
  403.         )
  404.  
  405.         (if (BITAND ServerOpts 256)
  406.           (
  407.             ; AMARQUEED_MAXQUEUEDMESSAGES
  408.             (set AMarqueed_MaxQueuedMessages
  409.               (asknumber
  410.                 (prompt "\n\nSpecify the maximum number of internal messages that an AMarqueed daemon may have in its message queue, or -1 to leave it unlimited.")
  411.                 (help "With this setting you can limit the size of each daemon's internal message queue; if the queue length exceeds the value you specify (due to perhaps a bad TCP connection), the daemon for that connection will be terminated and the connection closed.  50 is a good minimum value for this setting.")
  412.                 (range 1 99999999999)
  413.                 (default 50)
  414.               )
  415.             )
  416.             (textfile 
  417.               (dest "ENVARC:AMARQUEED_MAXQUEUEDMESSAGES")
  418.               (append AMarqueed_MaxQueuedMessages)
  419.             )
  420.           )
  421.         )
  422.  
  423.         (if (> ServerOpts 0) 
  424.           (run "copy ENVARC:AMARQUEED_#? env:")
  425.         )
  426.       )
  427.     )
  428.   )
  429. )
  430.  
  431. (if (BITAND InstallOpts 4) 
  432.   (
  433.     ; install AMarquee C includes
  434.     (set IncludeDir
  435.       (askdir
  436.         (prompt "Please indicate your C Amiga include directory.  This is the directory that contains the clib, libraries, fd, and pragmas subdirectories for your C or C++ compiler.")
  437.           (help "The Installer script is now going to install header files into your Amiga include directory.  The files to be installed include clib/amarquee_protos.h, libraries/amarquee.h, pragmas/amarquee_pragmas.h, and fd/amarquee.fd")
  438.           (default "include:amiga")
  439.       )
  440.     )
  441.     (copyfiles
  442.       (source "include/amiga")
  443.       (dest IncludeDir)
  444.       (all)
  445.     )
  446.   )
  447. )
  448.  
  449.  
  450. (if (BITAND InstallOpts 8) 
  451.   (
  452.     ; install AMarquee PCQ includes
  453.     (set IncludeDir
  454.       (askdir
  455.         (prompt "Please indicate your PCQ include directory.  This is the directory that contains the Intuition, Libraries, Resources, and other subdirectories for PCQ.")
  456.           (help "The Installer script is now going to install the header file AMarquee.i into the Libraries subdir of your PCQ include directory.")
  457.           (default "include:")
  458.       )
  459.     )
  460.     (copyfiles
  461.       (source "PCQ/AMarquee.i")
  462.       (dest (tackon IncludeDir "Libraries"))
  463.       (all)
  464.     )
  465.  
  466.  
  467.     ; install AMarquee PCQ lib
  468.     (set LibDir
  469.       (askdir
  470.         (prompt "Please indicate where you would like the stub library, AMarquee.lib, to be put.  One good place to keep it is in the same directory as PCQ.lib.")
  471.           (help "The Installer script is now going to install AMarquee.lib.  AMarquee.lib is a link library with stub functions that call the corresponding functions in amarquee.library, on behalf of your PCQ program.")
  472.           (default "include:/")
  473.       )
  474.     )
  475.     (copyfiles
  476.       (source "PCQ/AMarquee.lib")
  477.       (dest LibDir)
  478.       (all)
  479.     )
  480.   )
  481. )
  482.  
  483. (if (BITAND InstallOpts 16)
  484.   (
  485.     ; install AMarquee docs
  486.     (set DocDir
  487.       (askdir
  488.         (prompt "Please indicate the directory to put the AMarquee.guide into:")
  489.         (help "No new directory will be created!")
  490.         (default "ram:")
  491.         (newpath)
  492.       )
  493.     )
  494.     (copyfiles
  495.       (source "AMarquee.guide")
  496.       (dest DocDir)
  497.       (infos)
  498.     )
  499.   )
  500. )
  501.  
  502. (if (BITAND InstallOpts 32)
  503.   (
  504.     ; install AMarquee example programs
  505.     (set ExampleDir
  506.       (askdir
  507.         (prompt "Please indicate the directory to create the ExamplePrograms directory in.")                (help "A new directory named AMarqueeExamples will be created in the directory you specify.")
  508.         (default "ram:")
  509.         (newpath)
  510.       )
  511.     )
  512.     (set FileDir (tackon ExampleDir "AMarqueeExamples"))
  513.     (makedir FileDir)
  514.     (copyfiles
  515.       (source "Examples")
  516.       (dest FileDir)
  517.       (all)
  518.     )
  519.   )
  520. )
  521.